/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qq.vip.mikuPy2001.bukkit.gui;

import com.qq.vip.mikuPy2001.bukkit.gui.model.Module;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

/**
 *
 * @author MukiPy2001
 */
public interface WindowsView {

    /**
     * 为这个界面单独增加一个监听器.
     * <p>
     * 仅能监听到打开这个界面的玩家的界面事件.
     * <p>
     * 且在玩家关闭本界面后失效.
     *
     * @param listener
     */
    void addListener(ViewListener listener);

    /**
     * 关闭界面.
     */
    void close();

    /**
     * 卸载显示指定控件,
     *
     * @param module 要卸载的控件ID
     */
    void disable(String module);

    /**
     * 激活指定控件
     *
     * @param module 要激活的控件ID
     */
    void enable(String module);

    /**
     * 获取指定 Module
     *
     * @param ID
     * @return
     */
    Module getModule(String ID);

    /**
     * 获取打开此界面的玩家.
     *
     * @return
     */
    Player getPlayer();

    /**
     * 获取创建这个视窗的界面模板.
     *
     * @return
     */
    Windows getWindows();

    /**
     * 指示这个界面是否已经被关闭.
     *
     * @return
     */
    boolean isClose();

    /**
     * 获取指定位置上的物品
     *
     * @param index
     * @return
     */
    ItemStack getItem(int index);

    /**
     * 更新控件图标. 修改空间内部图标后将调用此方法, 一般用于内部调用.
     * <p>
     * 请使用{@link Module#setItemStack(org.bukkit.inventory.ItemStack) }
     *
     * @see Module#setItemStack(org.bukkit.inventory.ItemStack)
     * @param module
     */
    @Deprecated
    void update(Module module);

    /**
     * 更新箱子图标. 修改箱子内部图标后将调用此方法, 一般用于内部调用.
     * <p>
     * 一般用于内部调用, 请使用{@link Module#setItemStack(org.bukkit.inventory.ItemStack) }
     *
     * @see Module#setItemStack(org.bukkit.inventory.ItemStack)
     * @param index
     */
    @Deprecated
    void update(int index);
}
